1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
   | const wrapper = require('the-wrapper-module');
  const buttonClick = function () {     this.click(); };
  const setInputValue = () => {     var input = document.getElementById('kw');     input.value = 'Web自动化 headless chrome'; };
  const parseSearchResult = () => {     let resultList = [];     const linkBlocks = document.querySelectorAll('div.result.c-container');     for (let block of Array.from(linkBlocks)) {         let targetObj = block.querySelector('h3');         resultList.push({             title: targetObj.textContent,             link: targetObj.querySelector('a').getAttribute('href')         });     }     return resultList; };
 
  wrapper.prepareAPI({      }).then(([chromeInstance, remoteInterface]) => {     const {Runtime, DOM, Page, Network} = remoteInterface;     let framePointer;     Promise.all([Page.enable(), Network.enable(), DOM.enable(),Page.setAutoAttachToCreatedPages({autoAttach:true})]).then(() => {         Page.domContentEventFired(() => {             console.log('Page.domContentEventFired')             Runtime.evaluate({                 expression:`window.location.href`,                 returnByValue:true             }).then(result => {                 console.log(result)             })         });         Page.frameNavigated(() => {             console.log('Page.frameNavigated')             Runtime.evaluate({                 expression:`window.location.href`,                 returnByValue:true             }).then(result => {                 console.log(result)             })         })         Page.loadEventFired(() => {             console.log('Page.loadEventFired')             Runtime.evaluate({                 expression:`window.location.href`,                 returnByValue:true             }).then(result => {                 console.log(result)             })             DOM.getDocument().then(({root}) => {                                  DOM.querySelector({                     nodeId: root.nodeId,                     selector: '#form'                 }).then(({nodeId}) => {                     Promise.all([                                                  DOM.querySelector({                             nodeId: nodeId,                             selector: '#kw'                         }).then((inputNode) => {
                              Runtime.evaluate({                                                                                                   expression: `(${setInputValue})()`                             });
 
                                                                                                                                                  
                                                                                                                                                                                                        })                                                  , DOM.querySelector({                             nodeId,                             selector: '#su'                         })                     ]).then(([inputNode, buttonNode]) => {
                          Runtime.evaluate({                             expression: 'document.getElementById("kw").value',                         }).then(({result}) => {                             console.log(result)                         });
                          return DOM.resolveNode({                             nodeId: buttonNode.nodeId                         }).then(({object}) => {                             const {objectId} = object;                             return Runtime.callFunctionOn({                                 objectId,                                 functionDeclaration: `${buttonClick}`                             })                         });                     }).then(() => {                         setTimeout(() => {                             Runtime.evaluate({                                 expression: `(${parseSearchResult})()`,                                 returnByValue: true                             }).then(({result}) => {                                 console.log(result.value)                                                              })                         },3e3)                     });                 })
              });         });         Page.navigate({             url: 'http://www.baidu.com'         }).then((frameObj) => {             framePointer = frameObj         });     })
  });
  |